At the time of the initial introduction of personal computers or micro-computers, the central processing units (CPUs) had a relatively small amount of memory, 16 Kilobytes (16K) in them. Even so, a relatively large number of applications were developed for these computers. Shortly after the introduction of these earliest units, a significantly expanded 8 Bit processor was developed and widely sold, offering 64K of addressable memory. Many software packages were developed for these micro-processors, and effective office automation was under way.
The next major development came from IBM Corporation in the form of a personal computer with ten times this 64K system memory. An operating system known as MS-DOS.RTM. also was introduced to take advantage of the capabilities of the micro-processor chips used in these personal computers. The processor used in these early personal computers had 20 address lines. These 20 address lines permit access to one Megabyte (1M) of memory. This is one million bytes (2 to the twentieth power). The MS-DOS.RTM. operating system was written with this 1 Megabyte limitation in mind. These computers were capable of addressing 640K of memory for data processing as accessible memory, with the remaining memory being reserved for future functions.
In the mid 1980's, some computers were introduced which employed a micro-processor which had, among other improvements, 24 address lines, creating an address access of 16M (2 to the 24th power). Memory chip manufacturers also have continued to reduce the cost of the memory chips (DRAMS); so that increasingly larger memories are economically feasible for personal computer users.
In addition, however, increasingly sophisticated software was written, which required increasing amounts of the available system memory for applications approaching those which previously ran only on much larger mainframe computers or mini-computers. Such sophisticated software, such as the Lotus 1-2-3.RTM. spreadsheet program, consumed so much of the available 640K memory limit that a solution for increasing the available system memory was required. One solution, which has been utilized to some extent, was the development of different "protected mode" operating systems, such as UNIX.RTM., XENIX.RTM., and, most recently, the IBM operating OS/2.RTM..
MS-DOS.RTM. is not compatible with these protected mode operating system, however, since it operates with its original 1-Megabyte limit, and has no capability for utilizing memory beyond this limit. Because of the extremely large numbers of highly popular personal computers using MS-DOS.RTM. operating software, and, also, because of the large number of software applications developed to work with this operating system, a change to a different industry operating system, to take advantage of increased memory capacity, has not proven to be a desirable approach.
In an effort to overcome the MS-DOS.RTM. limitation, three major companies, Lotus.RTM., Intel.RTM., and Microsoft.RTM., (LIM) joined forces to develop the Expanded Memory Specification (EMS) board. The EMS board expands memory by creating a 192K window in a space between the original 640K limit and 1M of the 1M memory recognized by MS-DOS.RTM.. It should be noted that the address space above 640K was divided into six 64K slices, or equal portions of memory. These slices or memory portions are referred to in personal computing literature as A, B, C, D, E, and F for their hexadecimal representations. Similarly, the hexadecimal representations of the memory from 0K to 640K are divided into ten 64K slices or memory chunks represented by hexadecimal representations 0 through 9. By way of example, the hexadecimal representation A refers to the 64K slice of memory with the 24 Bit address A0000h (where h indicates a hexadecimal number).
The six slices of memory above 640K originally were reserved for various functions. The slice at F, for example, is reserved for BIOS ROM, with video adapters and other interface adapters going into the other slices, A, B, C, D, and E (if such peripherals are present in the specific system being operated).
EMS is designed to use three of these 64K memory slices (C, D, and E) for translating addresses below 1M into memory above 1M. This is accomplished, essentially, by taking an idle slice of memory above the 640K limit and using it as a window to "page" out to more memory. Currently, a system known as EMS 4.0 or LIM 4.0 operates to access up to 32M of memory, employing the same general techniques used in the original EMS specification. Currently, EMS defines 36 registers, each of which points to a 16K space. There are four registers in each of the three 64K slices. These are addressed, for example, for the hexadecimal "C" slice, as C 0XXX, C 4XXX, C 8XXXh, and CCXXXh. Similar addresses are used for the D and E slices. In addition, there are 24 registers located in RAM between 256K and 640K addresses 4 to 9. If EMS is used, these 24 registers also may be loaded with values that point to memory above 1M, for a total of 36 possible EMS addresses.
A problem exists, however, in the universal application of the EMS system defined generally above. In many applications, where customers desire to expand the memory of their systems, software drivers already are located in some of the spaces capable of use by EMS. For example, frequently, software drivers are located in the C, D, and E spaces. If EMS systems are to be used in computers which already have drivers located in these spaces, modification of the existing software is necessary before the EMS system can be utilized. The reinstallation of software in different memory slices or physical pages of memory is not something to be undertaken lightly, and many customers do not wish to modify software which already has been installed in these locations.
It is desirable to provide the capability of re-defining the location of EMS registers through hardware implementation at the option of the user, without modifying or relocating existing software located in memory locations normally used by EMS.